/************************************************************************************************
*Definicion de Nodo para comandos de 3 direcciones                                              *
*Author     :   Simon Emmanuel Gutierrez Brida                                                  *
*Version    :   0.1                                                                             *
*Fecha      :   Octubre/2011                                                                    *
*-------------------------------                                                                *
*Define la estructura y funciones asociadas para un Nodo a ser utilizado en listas encadenadas  *
*Un nodo esta formado por :                                                                     *
*- info         :   la informacion contenida por el nodo                                        *
*- siguiente    :   un puntero al siguiente nodo                                                *
*************************************************************************************************/

#ifndef NODOC3D_H
#define NODOC3D_H

#include "comando3d.h"

struct NodoC3D {
    Com3D *info;
    struct NodoC3D *next;
};

typedef struct NodoC3D NodoC3D;

/*funciones publicas para manipular nodos*/

/*constructores*/

/**
 * Construye un nuevo nodo vacio
 */
NodoC3D* nuevoNodoC3D_vacio();

/**
 * Construye un nuevo nodo
 * parametros
 * info: el comando que va a contener el nodo
 */
NodoC3D* nuevoNodoC3D_info(Com3D *info);

/**
 * Construye un nuevo nodo
 * parametros
 * info: el comando que va a contener el nodo
 * siguiente: el nodo siguiente a este
 */
NodoC3D* nuevoNodoC3D_info_siguiente(Com3D *info, NodoC3D *siguiente);

/*lectura de informacion*/

/**
 * Obtiene el comando almacenado en un nodo
 * parametros
 * nodo: el nodo del cual obtener el comando almacenado
 */
Com3D* obtenerInfo_nodoC3D(NodoC3D *nodo);

/**
 * Obtiene el siguiente nodo
 * parametros
 * nodo: el nodo del cual obtener el siguiente nodo
 */
NodoC3D* obtenerSiguiente_nodoC3D(NodoC3D *nodo);

/*escritura de informacion*/

/**
 * Define el comando a almacenar por un nodo
 * parametros
 * nodo: el nodo al cual agregar un comando
 * info: el comando a agregar
 */
void definirInfo_nodoC3D(NodoC3D *nodo, Com3D *info);

/**
 * Define el nodo siguiente a este
 * parametros
 * nodo: el nodo al cual agregar un nodo siguiente
 * siguiente: el siguiente nodo a este
 */
void definirSiguiente_nodoC3D(NodoC3D *nodo, NodoC3D *siguiente);

#endif